package com.tedu.api.io;



import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.logging.Filter;

/**
 * listFiles（接口：Filter）   重载
 * 作用：按照”指定规则“获取对应文件|文件夹
 *
 * Filter接口---专门给ListFiles方法提供：过滤文件或者文件夹【制指定规则】
 * accept（）从每个File的文件中判断,拿到【具体逻辑】的文件夹
 *
 * 需求：获取  API项目下  所有子项【文件和文件夹】，获取src文件
 *     指定规则：验证是s开头就是src
 *     //作业2：FileFilter接口按照  匿名内部类  方式  实现，功能如上需求！
 *       接口： FileFilter  ff=new FileFilter（） {accept（）}
 */

public class FilterAPI {
    //主方法：./路径指定根级
    public static void main(String[] args) throws IOException {
        //1.创建File文件类：获取当前API  文件类   路径：./
        File file=new File("."+File.separator);
        System.out.println(file.getCanonicalPath());
        //4.创建Filter接口对象---无法直接创建：实现类--实现--接口【创建】
        FileFilter  ff=new FileFilter() {
            public boolean accept(File pathname) {
               String name=pathname.getName();
               System.out.println("所有文件夾和文件夾名："+name);
               return name.startsWith("R");
           }
        };
        File[] subs=file.listFiles(ff);                                                                                       for (int i=0;i< subs.length;i++){//i 下标 从0开始
           System.out.println("過濾的文件"+subs[i].getName());
        }
        //2.获取文件夹下的所有”子项：文件夹下包括所有文件和文件夹“
        File[] sub=file.listFiles();
        //3.打印子项下所有名字
        for(int i=0;i<sub.length;i++){ // i   下标   从0开始
            System.out.println("所有文件和文件夹名："+subs[i].getName());
        }
    }
    //单元测试：./路径指定父级
//    @Test
//    public void test01()throws IOException {//创建File文件类:获取当前 API 文件爽路径:·/
//        File file = new File("." + File.separator);
//        System.out.println(file.getCanonicalPath());
//    }
}
//创建实现类---实现--Filter接口---对象创建
class Myfilter implements FileFilter {
    //accept(File pathname)
    //传入参数：File pathname--获取所有需要过滤文件
    //作用：添加过滤条件，将获取所有需要过滤的文件，
    //     逐一过滤，【条件：规则--开发者指定】条件
    //     满足返回true，输出,条件不满足反之

    public boolean accept(File pathname) {
        //添加规则：文件或者文件是 s 开头  --  过滤
        //①获取所有的文件夹名字
        String name=pathname.getName();//  文件夹 ：   src  字符串
        //②过滤以  s  开头的文件夹  字符串：starWith（） 返回值boolean
        //作用：验证字符串首字符是不是匹配字符，如果匹配：true，反之不匹配
        //③打印过滤出现字符串
        System.out.println("过滤出来文件夹名字是："+name);
        return name.startsWith("s");
    }
}
//1.创建File文件类 : 获取当前 API 文件夹  路径：./API
//匿名内部类：替换子类继承FileFilter
      /*  FileFilter my=new FileFilter() {
            public boolean accept(File pathname) {
                return pathname.getName().startsWith("s");
            }
        };*/
//2.获取文件夹下的所有“子项：文件夹下包括所有文件和文件夹”

//3.打印子项下所有名字     增强for
       /* for(int i=0;i<subs.length;i++){ //i 下标  从0开始
            System.out.println("所有文件和文件夹名："+subs[i].getName());
        }*/
//增强for for(接收类型 f:){}
/*
        for(File f:new File("."+File.separator+"API").listFiles((pathname)->{return pathname.getName().startsWith("s");})){
                System.out.println("遍历后过滤完成："+f);
                }
                }
                }
*/

